perm filename RHYTH.OLD[NEW,LCS]1 blob
sn#318229 filedate 1977-12-14 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 C***** SUBRS RHYTH, SETUP, MARKS, DOTS ********
C00028 ENDMK
C⊗;
C***** SUBRS RHYTH, SETUP, MARKS, DOTS ********
SUBROUTINE RHYTH
COMMON/RINP/R(10,80),POSNT(0/99)
COMMON/RMOD/RMODE2,SET4,IBEAM,NOSET,STEM,STUP,NTC,
1 PS2,RA,RDD,ITB,POSB /PTR/KWDS(250),ITEM,NL,NO,IX
COMMON/DPY/ST(4000),WDS(250),MEDIT,GO /XRN/RN(2000)
1 /SCM/V(78),I,LCNT,STAFF,LIST(200),REND
COMMON /SCX/RHY(4),JALPHA(30),JX,JXX,JZ,IRHY,JD,KA,KB,IZ
COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,
1 NFLG,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
COMMON/ALF/INP(59),NX,NOTE,JSET,KZ,KX,AVGPOS,RLPOS,RLP2,
1 AVP2,ZX,RE,ZZ,RD,RSTX
C SEE ALSO FILLMS, SETLET AND SETUP RE. /FLM/
COMMON /POS/POS1,POS2 /STF/RSTFAC(0/7),RSTJ2
DIMENSION RPOS(2,100)
EQUIVALENCE (VX(1),X),(VX(2),Y),(VX(7),Z),(RPOS,ST(3400))
1,(VX(3),AB),(VX(4),T),(VX(5),RB),(VX(6),X2)
1,(VX(8),C),(VX(9),S),(VX(10),X3)
DATA FIB/.75/
C FIB IS FOR PSUEDO-FIBONACCI SPACING
RSTJ3=RSTFAC(IFIX(STAFF))
NX=-1
JX=0
Y=0
NOTE=0
ICNTPT=-1
NOSET=0
JSET=0
C STUP IS NEG. IF SETUP IS NOT READY
IF(STUP)GO TO 341
IF(SET4.NE.STAFF)GO TO 70
NOSET=-1
C TO ADD MORE NOTES ON SETUP LINE. WIPES OUT P9 AT END OF SCMSS.
GO TO 270
CC70 DO 370 K=1,ITEM-IRHY-2
70 DO 370 K=1,ITEM-IZ-1
C LOOKS ONLY AT THINGS BEFORE CURRENT INPUT.
J=KWDS(K)
IF(RN(J+1).GT.2)GO TO 370
IF(RN(J+2).EQ.STAFF)GO TO 270
370 CONTINUE
GO TO 170
270 ICNTPT=0
C THIS WILL CAUSE NOTES ADDED TO LINE TO HAVE NO RHYTH VAL IN P9
170 KZ=1
POS2=PS2
C GETS LAST ↑↑ POS. FROM SETUP
JSET=-1
C NEXT NUM.(100) IS LIMIT FOR STF.4 (CAN BE UP TO 300-SEE /FLM/)
DO 9 KX=1,100
9 IF(RPOS(2,KX).GE.0)GO TO 10
10 AVGPOS=RPOS(1,KX)
RLPOS=AVGPOS
344 KX=KX+1
IF(RPOS(2,KX).EQ.-3)GO TO 344
C**** IGNORES CLEFS (BUT NOT BARS) IN AUTOMATIC SPACING ***** 10/76
RLP2=RPOS(1,KX)
343 AVP2=RPOS(2,KX)-.001
IF(AVP2.GT.0)GO TO 341
KX=KX+1
GO TO 343
C AVERAGED AND REAL POSITIONS FROM 'SETUP'
C NEXT FOR NON-SETUP
341 DO 34 K=1,IRHY
Z=ABS(V(K))
CC34 IF(V(K).GT..05)Y=ABS(V(K))+Y
C 88TH NOTES ARE TAKEN AS GRACE NOTES. THEN BECOME 32NDS.
IF(Z.NE.4./88.)GO TO 345
IF(JSET)GO TO 34
C GRACE NOTES SKIPPED IN AUTOMATIC SETUP
Z=.125
C TAKES 1/32 SPACE FOR GRACE NOTE.
CF Y=Y+.125
CF GO TO 34
CF345 Y=ABS(V(K))+Y
345 IF(STUP.LT.-1)Z=Z+(.125-Z)*FIB
C STUP CAN BE SET TO .LT.-1 IN NOTBMS FOR PSUEDO-FIBONACCI SPACE
Y=Y+Z
34 CONTINUE
C Y=TOTAL TIME
CX POZ1=POS1
CX POSNT(0)=POS2
C A SAFEGUARD
C SAVES POS1 FOR POSITIONING MF, CRESC. ETC.
NTC=0
C THE WORD COUNT FOR REAL NOTES.
IF(JSET)GO TO 3421
IF(POS1.LT.POS2)POSX=POS1
C SAVES IT FOR BACKUP
IF(POS1.GE.POS2)POS1=POSX
Z=POS2-POS1
ZX=Z
342 DO 1 K=1,IZ
X=R(1,K)
IF(X.LT.3.)GO TO 1
C JUMP IF NOTE OR REST
IF(X.NE.17.)GO TO 8
C JUMP IF NOT A KEY SIG.
RA=AMOD(R(5,K),100.0)
C 100+KEY SIG NUM = SIG MADE UP OF NATURALS.
RA=2.+ABS(RA)*2.0
GO TO 6
8 IF(X.NE.4.)GO TO 81
C NEXT IS FOR BAR LINES
RA=3
J=K+1
RE=R(1,J)
IF(RE.EQ.3.)RA=1.5
C A CLEF
IF(RE.EQ.18)RA=2.5
C A METER
IF(RE.NE.1)GO TO 83
IF(AMOD(R(5,J),10.).NE.0)RA=4.5
C FINDS ACCI ON NEXT NOTE.
83 IF(K.EQ.IZ)RA=0
C END OF STAFF
GO TO 6
82 RA=5
CGHB82 RA=6
GO TO 83
81 IF(X.EQ.18)GO TO 82
RA=6.
IF(K.LT.3)RA=8.
CGHB RA=7.
C FOR CLEFS
CGHB IF(K.LT.3)RA=9.
C THE FIRST CLEF IS NOT MINI
6 RA=RA*RSTJ3
C SO SPACE WILL DEPEND ON SIZE OF STAFF
Z=Z-RA
R(8,K)=RA
C STORES SPACE NUM THAT MUST BE GIVEN BACK
1 CONTINUE
C SUBTRACTS SPACE FOR CLEF OR BAR. WILL ADD BOTH LATER.
C POS1 AND Z ARE FOR RHYTHMIC SPACING
C SPACE FOR NON-NOTES
134 FORMAT(' **** MISMATCH WITH SPACING STAFF')
3421 K=0
IF(ABS(Y-RA).LE..001)GO TO 3
IF(JSET)TYPE 134
C LOOP TO END
3 K=K+1
C K IS COUNTER
R(7,K)=0
RE=R(1,K)
IF(RE.LE.2.)GO TO 2
RD=R(8,K)
R(8,K)=0
IF(JSET)GO TO 71
7 IF(K.EQ.IZ)POS1=POS2
IF(R(1,K-1).GT.2.)GO TO 73
IF(K.EQ.1)GO TO 73
IF(RE.EQ.4.)GO TO 73
Z=Z+RD/3.
C RETURNS 1/3 OF THE SPACE IF PREV. ITEM IS NOTE OR REST
POS1=POS1-RD/3
C THIS CAN RESULT IN OVERLAP WHICH MUST BE EDITED OUT.!!
73 R(3,K)=POS1
72 POS1=POS1+RD
C ABOVE SECTION LEAVES ROOM FOR CLEF OR BAR
GO TO 337
C 40??? 50???? WHY NOT 100?
71 DO 74 J=KZ,80
74 IF(RE.EQ.-RPOS(2,J))GO TO 75
POS=R(3,K-1)+4
GO TO 76
75 POS=RPOS(1,J)
KZ=J+1
C FOUND SAME TYPE OF ITEM.
76 R(3,K)=POS
GO TO 337
2 JX=JX+1
21 AB=V(JX)
J=9
IF(RE.NE.2)GO TO 121
V(JX)=-AB
C SHOWS RESTS IN AUTO. BEAM SECTION.(ASSUMES REST WAS A + NUMB.)
J=7
121 IF(R(8,K).GE.-1.)R(J,K)=AB
C STORES RHYTH VALUE FOR LATER USE IN PART EXTRACTOR IF NOT CHORD NOTE.
IF(AB.GT..05)GO TO 210
R(3,K)=-1.
CC RA=100
CC T=R(4,K)
CC IF(T)RA=-RA
CC R(4,K)=T+RA
R(4,K)=R(4,K)+100.
C WILL THIS BE OK WITH NOTES BELOW B3 (I.E. NEG POSITIONS.
R(7,K)=1
C FOUND A GRACE NOTE (88TH NOTE)
JZ=1
1211 IF(R(8,K+JZ).GE.0)GO TO 211
J=K+JZ
R(3,J)=-1
C FOR AUTO-SPACING AT 337
R(4,J)=R(4,J)+100.
C MAKE IT A MINI-NOTE
R(8,K)=1000.+ABS(R(4,K)-R(4,J))
C EXTEND THE STEM
JZ=JZ+1
C FOR MORE CHORD NOTES. SHOULD I CHECK FOR END (IZ)?
GO TO 1211
CC211 IF(JZ.GT.1)GO TO 2211
C DON'T CHANGE STEM DIR. IF A CHORD
CC R(8,K)=1000
C 1000 IN P8 PUTS IN SLASH ON TAIL
CC IF(STEM.GE.0)GO TO 2211
CC RA=R(5,K)
CC IF(RA.GE.20)R(5,K)=RA-10.
CC IF(RA.LT.20)R(5,K)=RA+10.
C ** NOT NOW ***TURNS STEM OVER. UNLESS STEM DIRECTIONS WERE FIXED.(SU/SD/)
211 IF(JZ.LE.1)R(8,K)=1000
2211 IF(JSET.GE.0)GO TO 3211
K=K+JZ-1
C POS WILL BE SET AT 336
NTC=NTC+1
C UPDATE THE COUNTER FOR IMPORTANT POSITIONS. POSNT SET AT 336
POSNT(NTC)=-1
GO TO 337
3211 AB=.125
C IT USED TO JUMP. NOW MAKES SPACE FOR GRACE NOTES AS 32NDS.
210 RB=0
CC IF(JSET.GE.0.AND.SET4.LT.0)R(8,K)=-AB-1000.*R(8,K)
C FOR AUTOMATIC SETUP
JZ=K
C JZ WILL BE USED NEAR END
3634 IF(AMOD(AB,.1875).EQ.0)GO TO 122
IF(AMOD(AB*10.,1.5).EQ.0)GO TO 122
C .1875 FINDS SINGLE DOTS ON NOTES (.15 FOR QUINTS) (*10 FOR ROUNDOFF!)
IF(AMOD(AB,.4375).NE.0)GO TO 22
T=20
GO TO 322
122 T=10
322 IF(RE.EQ.2.)GO TO 35
IF(R(6,K).LT.20)GO TO 422
T=T+100
C TO SHIFT DOT DOWN 2 STEPS
CC IF(R(6,K).EQ.30)R(6,K)=0
422 R(7,K)=T
C PUTS ONE OR TWO DOTS
GO TO 36
35 R(6,K)=T/10.
C ADDS DOT TO REST.
36 RB=AB/3.
IF(T.NE.1)RB=(4*AB)/7
C TO KEEP TAIL ON DOTTED NOTE
22 POS=POS1
IF(R(6,K).GE.30)R(6,K)=R(6,K)-30
C 30 NEEDED FOR SOME CASES WITH DOTS ON CHORDS.
IF(JSET.EQ.0)GO TO 220
C NEXT IS FOR SETUP
222 IF(NOTE)GO TO 223
C FIRST TIME A NOTE IS FOUND.
NOTE=-1
POS1=RLPOS
Z=POS2-POS1
C RESETS SPACE AVAILABLE, ZZ IS SPACE FOR NON-NOTES
223 IF(POS1.LT.AVP2)GO TO 221
224 KX=KX+1
C???? OCT, 73 IF(NX.EQ.0)GO TO 225
L=KX
1228 IF(RPOS(2,L).NE.-3)GO TO 228
L=L+1
C IGNORE CLEFS (BUT NOT BARS) ********* 10/76
GO TO 1228
228 IF(NX)RLP2=RPOS(1,L)
NX=-1
225 IF(RPOS(2,KX-1))GO TO 227
RLPOS=RPOS(1,KX-1)
AVGPOS=AVP2
227 AVP2=RPOS(2,KX)-.001
IF(AVP2.GT.0)GO TO 223
C 0 IN RPOS=POS. OF NON-NOTE
CC****** WHY NEEDED?? 6/74 *** IF(RLP2.GE.POS1)NX=0
NX=0
CC*****↑↑↑↑ CHANGED FROM ABOVE *** 6/74
GO TO 224
221 POS=(POS1-AVGPOS)*(RLP2-RLPOS)/(AVP2-AVGPOS)+RLPOS
220 R(3,K)=POS
4634 IF(RE.NE.1)GO TO 44
IF(POS.EQ.POSNT(NTC))GO TO 2634
C SKIPS OTHER CHORD NOTES.
NTC=NTC+1
POSNT(NTC)=POS
C SAVES IT FOR NUMBS ABOVE NOTES, ETC.
2634 IF(AB.GE.2)GO TO 4
IF(AB.EQ.1.333333333)GO TO 4
44 L=K+1
IF(R(8,L).GE.0)GO TO 1634
IF(R(1,L).NE.1.)GO TO 1634
C JUMP IF NOT DOUBLE STOP
C DELETES STEM FROM WHOLE NOTE CHORD (NOW DONE IN NOTWRT IF P7=1)
R(3,L)=R(3,K)
K=L
CC R(8,K)=0
GO TO 3634
C LOOPS BACK TO PICK UP MORE CHORD NOTES
C 'WHITENS' HALF, WHOLE AND TRIPLET HALF NOTES.
4 RA=-R(6,K)
IF(RA.EQ.0)RA=-1
IF(AB.LT.4.)GO TO 144
R(5,K)=AMOD(R(5,K),10.0)
C TAKES STEM INFO OFF WHOLE NOTES -- FOR SLUR ROUTINE.
RP=1
IF(AB.GE.8)RP=2
R(7,K)=R(7,K)+RP
C +1=WHOLE NOTE WILL PRINT +2=DBL WHL NT.
CC NOT NEEDED BECAUSE OF ABOVE. RA=-2.
144 R(6,K)=RA
GO TO 44
1634 T=POS1
RP=AB
IF(STUP.LT.-1)RP=AB+(.125-AB)*FIB
C FOR PSUEDO-FIB. SPACING
POS1=RP/Y*Z+POS1
CF POS1=AB/Y*Z+POS1
CZ GO TO 1636
CZ IF(JSET)GO TO 1636
CZ RP=6.
CZ IF(AMOD(R(5,K+1),10.0).EQ.0)RP=3.
C 3 SPACES IF NO ACCID. ON NEXT NOTE, OTHERWISE 6.
CZ RA=POS1-T
CZ RSTX=RP*RSTJ3
CZ IF(RA.GT.RSTX)GO TO 1636
C JUMP IF NOTES ARE FAR ENOUGH APART
CZ RA=RSTX-RA
C THE DIFFERENCE
CZ Z=Z-Z*RA/(POS2-POS1)
C REDUCES TOTAL SIZE Z
CZ POS1=T+RSTX
1636 T=ABS(R(4,K))
IF(T.LT.500.0.AND.T.GE.80.0)GO TO 337
C LEAVE TAILS ON GRACE NOTES ALONE. (NO SKIP WHEN IN MODE 500)
T=0
RA=AB-RB
IF(RA.EQ.4./6.)GO TO 535
IF(RA.EQ.4./7.)GO TO 535
IF(RA.GT..75)GO TO 535
C KEEPS TAILS OFF TRIPLETS, QUINTS, SEPTS.
DO 534 N=1,4
534 IF(RA.LE.RHY(N))T=N
C DELETES STEM FROM WHOLE NOTES. (NOW DONE IN NOTWRT IF P7=1)
535 IF(R(1,JZ).EQ.1.)GO TO 334
CC R(4,JZ)=0
RA=R(4,JZ)
C SETS REST
IF(R(8,JZ).NE.0.1)GO TO 537
T=-4
R(8,JZ)=-2
C -2 CENTERS THE SIGN UNDER THE RIGHT CONDITIONS
GO TO 536
537 IF(AB.LT.2)GO TO 536
T=-1
IF(AB.GE.4)T=-2
IF(AB.GE.8)T=-3
C -1=HLF RST, -2=WHOLE, -3=DBL WHL RST, -4=REPEAT BAR SIGN(./.)
C WON'T DO DOUBLE DOTTED WHOLE NOTES.
536 R(5,JZ)=T
GO TO 337
C******* 4/74 NEW WAY TO FIND TAILS
C OMITS RESTS (REALLY???)
334 R(7,JZ)=T+R(7,JZ)
337 IF(K.LT.IZ)GO TO 3
M=NTC
DO 335 K=IZ,1,-1
IF(R(3,K).GE.0)GO TO 335
IF(K.NE.IZ)GO TO 336
R(3,K)=POS2-4.
GO TO 335
336 N=K-1
1336 RA=R(3,N)
IF(RA.GT.0)GO TO 2336
N=N-1
IF(N.GT.0)GO TO 1336
C GO BACK (IF MORE GRACE NOTES.) TO FIND PREVIOUS BIG NOTE.
2336 T=R(3,K+1)
RB=T-RA
RA=4
IF(RB.LE.4)RA=RB/3.
C IF SPACE IS SMALL USE 1/3 OF IT.
RB=T-RA
C NEXT FOR GRACE NOTE CHORDS
IF(R(8,K+1).GE.0)GO TO 1335
RB=R(3,K+1)
M=M+1
1335 R(3,K)=RB
POSNT(M)=RB
335 M=M-1
K=0
45 K=K+1
C NEXT IS TO ARRANGE DOTS.
IF(R(7,K).LT.10)GO TO 451
RA=R(3,K)
DO 452 M=K+1,IZ
IF(R(3,M).NE.RA)GO TO 453
C JUMP IF NOT CHORD NOTE.
T=R(7,M)
RB=R(4,M)
IF(T.LT.100.)GO TO 452
C JUMP IF NOTE IS NOT ON LEFT SIDE OF UPWARD STEM
IF(RB-R(4,M-1).NE.2)GO TO 452
IF(AMOD(RB,2.).NE.0)R(7,M)=AMOD(T,10.)
C TAKES AWAY DOT IN CERTAIN CASES TO AVOID CONFUSION.
452 CONTINUE
453 K=M-1
451 IF(K.LT.IZ)GO TO 45
IF(ICNTPT)GO TO 13
DO 113 K=1,IZ
RA=R(1,K)
IF(RA.GT.2)GO TO 113
C THIS ZEROS RHYTH PARAM IF NOTES WERE ALREADY ON THIS LINE.
J=9
IF(RA.EQ.2)J=7
R(J,K)=0
113 CONTINUE
13 N=IZ
NTC=NTC+1
POSNT(NTC)=200
POSNT(0)=0
IF(IREAD)RETURN
DIMENSION ISU(390)
COMMON R2,JH,CENTR,J2,R3,R4,R5,RJQ(17),J3,JQ(19)
1 /POSI/STFF(0/7),JJ2,POSQ /FRMT/FQZ(3),IREAD
EQUIVALENCE (ISU,ST(3600)),(J5,JQ(2))
CALL DPYSET(3,ISU,390)
CALL DPYBRT(6)
J2=STAFF
POSQ=STFF(J2)
J5=1
CC RA=-100
R4=20
C R5=0=1 STANDARD SIZE IS USED.
DO 131 K=1,NTC-1
CC IF(R(1,K).NE.1)GO TO 131
CC IF(R(3,K).EQ.RA)GO TO 131
CC RA=R(3,K)
CC R3=RHORZ(RA)
R3=RHORZ(POSNT(K))
CALL PNUM
C GOES TO DRAW A NUMBER OVER A NOTE
J5=J5+1
IF(J5.EQ.10)J5=0
131 CONTINUE
132 CALL DPYOUT(3)
CALL SETPOG(1)
END
C SETUP ALLOWS SETING UP RHYTHMS ON DESIGNATED STAFF FOR SPACING ALL OTHERS.
SUBROUTINE SETUP
INTEGER PWDS
CCC COMMON/FLM/RPOS(2,300) /ALF/JX,X,RD,RNL,RN6,M,A,RB,RC,
COMMON /ALF/JX,X,RD,RNL,RN6,M,A,RB,RC,
1 INP(64) /SCM/V(78),IV,LCNT,STAFF,LIST(200),REND
COMMON /PTR/PWDS(250),ITEM,L,I,IX
COMMON/DPY/ST(4000),WDS(250),MEDIT,GO /XRN/RN(2000)
COMMON/RMOD/RMODE2,SET4,IBEAM,NOSET,STEM,STUP,NTC,
1 ENDP,RA,RDD,ITB,POSB
DIMENSION RPOS(2,100)
EQUIVALENCE (RPOS,ST(3400))
C RHYTHMIC VALUES ARE SAVED IN P9 OF NOTES AND P7 OF RESTS.
STUP=-1
C THIS SENDS INFO TO SUBR. NOTES
IF(SET4.GT.7)RETURN
C%%%%% IF(SET4.GT.4)RETURN
C **** BE SURE SETUP STAFF HAS SPACE VALUES IN NOTES AND RESTS!!!
IF(ITEM.EQ.0)RETURN
JX=0
CC RNL=0
RA=0
DO 9534 K=1,ITEM
L=PWDS(K)
IF(RN(L+2).NE.SET4)GO TO 9534
RD=RN(L+1)
IF(RD.LT.5)GO TO 5
IF(RD.LT.17)GO TO 9534
5 IF(RD.GT.2)GO TO 6
RC=7
IF(RD.EQ.2)RC=5
IF(RN(L).LT.RC)GO TO 9534
M=9
IF(RD.EQ.2)M=7
IF(RN(L+M).EQ.0)GO TO 9534
C FOR OTHER NOTES ON SPACING STAFF.
IF(RN(L+8).GT.999.)GO TO 9534
C SKIPS MINI-NOTES. BUT TROUBLE IF STEMS CAUSE P8 TO BE ≤ 999.
GO TO 7
C SKIPS 'OTHER' CHORD TONES (I.E. P9=0 IN A NOTE)
6 IF(RD.NE.3)GO TO 8
IF(RN(L).LT.3)GO TO 7
RC=RN(L+5)
IF(RC.GE.100)GO TO 7
IF(RC.GT.3)GO TO 9534
C SKIPS IF NOT A REAL CLEF (+100=MINI CLEF)
GO TO 7
8 IF(RD.NE.4)GO TO 10
IF(RN(L).GT.2)GO TO 9534
C SKIPS IF NOT BARLINE (I.E. ONLY 4 PARAMS)
10 IF(RD.NE.2)GO TO 7
IF(RN(L).LT.5)GO TO 9534
IF(RN(L+7).EQ.0)GO TO 9534
7 JX=JX+1
RPOS(1,JX)=RN(L+3)
IF(RD.GT.2)GO TO 3
C JUMP WHEN TIME VALUES ARE IN P8
RC=RN(L+M)
C FOR VALUES AUTOMATICALLY SET. ALLOWS NON-DUPLE UNITS IN SETUP
277 RA=RA+RC
C SUM OF RHYTHS
GO TO 77
3 RC=-RD
77 RPOS(2,JX)=RC
C RC IS RHYTHMIC VALUE OF NOTE.
9534 CONTINUE
C NEXT PUTS ITEMS IN PROPER ORDER IF THEY WEREN'T ALREADY
C*** 2ND NOTE OF DBL STOP CAN'T!! HAVE RHYTH. VALUE *******
IF(RA.EQ.0)RETURN
C RA=0 MEANS DIDN'T FIND RHYTHMS ON SPACING STAFF.
CALL SORT2(RPOS,JX)
ENDP=200.
IF(RPOS(2,JX))ENDP=RPOS(1,JX)
DO 1 L=1,JX
1 IF(RPOS(2,L).GT.0)GO TO 4
4 RD=RPOS(1,L)
RB=ENDP-RD
C TOTAL SPACE FROM 1ST NOTE TO END OF LINE
RC=RPOS(2,L)
RPOS(2,L)=RD
C REAL AND AVERAGED POSITIONS OF 1ST NOTE ARE THE SAME.
DO 2 K=L+1,JX
RE=RPOS(2,K)
IF(RE)GO TO 2
RD=RC/RA*RB+RD
RC=RE
RPOS(2,K)=RD
2 CONTINUE
C 1,K=REAL POS. 2,K=AVERAGED POS.
C IN RHYTH: POS=(P1-AVG2)*(RL2-RL1)/(AVG2-AVG1)+RL1
JX=JX+1
RPOS(1,JX)=ENDP
RPOS(2,JX)=ENDP
STUP=0
C THIS FOR NOTES AND RHYTH
END
SUBROUTINE MARKS(RA)
COMMON/ALF/INP(72),ML
DIMENSION MKS(14)
DATA MKS/'W','A','F','S','M','T','D','U','H','I','P','C','R','O'/
EQUIVALENCE (MF,MKS(3)),(MH,MKS(9)),(MP,MKS(11)),(MM,MKS(5))
1,(MC,MKS(12)),(MR,MKS(13)),(MI,MKS(10)),(MS,MKS(4))
RA=99
DO 16 JM=1,72
16 IF(INP(JM))GO TO 17
C DIDN'T FIND MORE LETTERS
RETURN
17 N=INP(JM)
ML=INP(JM+1)
M=INP(JM+2)
DO 1 K=1,14
1 IF(N.EQ.MKS(K))GO TO 2
C DID NOT FIND A LETTER
RETURN
C 4=W(EDGE),5=A(CCENT),26=FE(RMATA),7=S(TACCATO),9=T(ENUTO)
C 11=D(OWNBOW), 12=U(PBOW),13=H(ARMONIC),14=PL(US),15=TH(ESIS)
C 16=AR(SIS),17=MO(RDANT)
C 18=I(NVRTD MORD), ---,20=TR(ILL), >39=PPP, PP, CRESC., ETC.
C 21=HW (HEAVY WEDGE), 80=ACC(EL.) FICTA:1=FLAT, 2=#, 3=NAT.
2 GO TO(120,10,12,120,4,11,15,15,15,21,12,80,81,87),K
12 IF(ML.EQ.'L')GO TO 120
C ↑↑↑ PLUS
IF(N.EQ.MF)GO TO 121
RA=42
IF(ML.NE.MP)GO TO 18
RA=41
IF(M.EQ.MP)RA=40
C FOR P, PP, PPP -- 42, 41, 40
GO TO 18
15 IF(ML.EQ.MI)GO TO 82
K=K+1
IF(ML.EQ.MKS(1))K=18
C 'HW' MAKES 21 (EVENTUALLY MAKES CLEF# 44)
120 IF(ML.EQ.MF)GO TO 88
K=K+3
8 RA=K
C YOU CAN TYPE # OR NAME OF MARK
18 DO 6 JM=1,72
N=INP(JM)
INP(JM)=' '
C BLANKS OUT USED LETTERS
IF(N.EQ.'/')RETURN
IF(N.EQ.'*')RETURN
6 IF(N.EQ.';')RETURN
4 IF(ML.EQ.'O')GO TO 20
RA=43
IF(ML.EQ.MF)RA=50
C ↑↑↑↑↑ MP, MF
GO TO 18
121 IF(ML.EQ.'E')GO TO 120
C ↑↑↑ FERMATA
RA=51
IF(ML.EQ.MF)RA=52
IF(ML.EQ.MP)RA=54
IF(M.EQ.MF)RA=53
C F, FF, FFF, FP -- 51, 52, 53, 54 --- SF=45, SFZ=92
IF(ML.NE.MI)GO TO 22
C TYPE FIF, FIS, FIN FOR FICTA flat, sharp, natural
RA=1
JM=JM+1
M=INP(JM+1)
IF(M.EQ.MS)RA=2
IF(M.EQ.'N')RA=3
GO TO 18
22 M=NALF(ML)
IF(M)GO TO 18
IF(M.LE.5)RA=30+M
C TYPE /2 F0/6 F5/ FOR FINGERING NUMS. 0-5
GO TO 18
88 RA=45
C FOR SF AND SFZ
IF(INP(JM+2).EQ.'Z')RA=92
GO TO 18
CC5 K=14
CC GO TO 8
10 IF(ML.EQ.MC)GO TO 84
IF(ML.NE.MR)GO TO 120
19 K=13
C 'R' FOR ARSIS
GO TO 120
11 IF(ML.EQ.MH)K=12
C THESIS
IF(ML.EQ.MR)K=17
GO TO 120
20 K=17
GO TO 8
21 K=18
GO TO 8
80 IF(ML.EQ.'+')GO TO 85
C FOR /N1 C+ N2/ ETC. -- CRESC. AND DECRESC. LINES.
IF(ML.EQ.'-')GO TO 86
RA=70
C CRESC.
GO TO 18
85 RA=200
GO TO 18
86 RA=199
GO TO 18
87 RA=208
GO TO 18
C ↑↑↑ FOR /N1 OT N2/ 8va
81 RA=37
C RIT.
GO TO 18
82 RA=82
C DIM.
GO TO 18
84 RA=80
C ACCEL.
GO TO 18
END
CC NO LONGER CALLED SUBROUTINE DOTS(L,Z,X,RC)
C M=BASIC RHY. NX=NUM OF DOTS
CC COMMON /XRN/RN(4000)
CC RC=4./2.**(Z+2.)
CC IF(RN(L).LT.4)RETURN
CC IF(X.EQ.0)RETURN
C -2=WHOLE, -1=HALF, 0=QUART, 1=EIGHTH, 2=SIXTEENTH, ETC.
CC B=RC
CC DO 100 NN=1,IFIX(X)
CC B=B/2
CC100 RC=RC+B
CC END